package com.warm.test.satoken;

import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.warm.core.domain.R;
import lombok.extern.slf4j.Slf4j;
import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Mapping;
import org.noear.solon.validation.annotation.NotBlank;
import org.noear.solon.validation.annotation.Valid;

/**
 * sa-token 登录demo
 *
 * @author warm
 */
@SaIgnore
@Slf4j
@Valid
@Controller
@Mapping("/demo/user/")
public class LoginController {

    /**
     * 测试登录，浏览器访问： http://localhost:18080/demo/user/doLogin?username=zhang&password=123456
     *
     * @param username
     * @param password
     * @return
     */
    @Mapping("doLogin")
    public String doLogin(@NotBlank String username, @NotBlank(message = "密码不能为空") String password) {
        if (StpUtil.isLogin()) {
            return "已登录！";
        }
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if ("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            return "登录成功";
        }
        return "登录失败";
    }

    /**
     * 查询登录状态，浏览器访问： http://localhost:18080/demo/user/isLogin
     *
     * @return
     */
    @Mapping("isLogin")
    public String isLogin() {
        return "当前会话是否登录：" + StpUtil.isLogin();
    }

    /**
     * 查询 Token 信息 ---- http://localhost:18080/demo/user/tokenInfo
     *
     * @return
     */
    @Mapping("tokenInfo")
    public R<SaTokenInfo> tokenInfo() {
        return R.ok(StpUtil.getTokenInfo());
    }

    /**
     * 测试注销 ---- http://localhost:18080/demo/user/logout
     *
     * @return
     */
    @Mapping("logout")
    public R logout() {
        StpUtil.logout();
        return R.ok();
    }
}
